package com.xwt.program;

/**
 * @author xwt
 * 程序入口
 */

import com.xwt.pdfutils.PdfUtil;

import javax.swing.*;
import java.util.Scanner;

public class PDF2Image {
    // pdf文件路径
    private static String pdfFilePath;
    // pdf图片存放路径
    private static String pngDir;
    // 图片dpi
    private static Integer dpi;
    // 线程数量
    private static Integer threads;

    public void pdfToImage() {
        while (true) {
            System.out.println("========PDF转换图片工具========");
            System.out.println("选择操作时请输入操作前的数字");
            System.out.println("1.选择pdf文件");
            if (pdfFilePath != null){
                System.out.println("pdf文件路径："+ pdfFilePath);
            }
            System.out.println("2.选择图片存放文件夹");
            if (pngDir != null){
                System.out.println("图片存放文件夹路径："+pngDir);
            }
            System.out.println("3.输入图片dpi（dpi越大转换后越清晰，相对转换速度越慢）");
            if (dpi !=null){
                System.out.println("图片dpi为："+dpi);
            }
            System.out.println("4.输入开启线程数（默认为5）");
            if (threads != null){
                System.out.println("开启线程数为："+ threads);
            }
            System.out.println("5.开始转换");
            System.out.println("6.退出系统");
            System.out.print("请选择你的操作：");
            Scanner sc = new Scanner(System.in);
            String s = sc.nextLine();
            switch (s) {
                case "1":
                    chooseFile(sc);
                    break;
                case "2":
                    chooseDir(sc);
                    break;
                case "3":
                    chooseDpi(sc);
                    break;
                case "4":
                    chooseThreads(sc);
                    break;
                case "5":
                    if (pdfFilePath ==null&&pngDir==null&&dpi ==null){
                        System.out.println("参数不足无法操作");
                        break;
                    }
                    PdfUtil pdfUtil = new PdfUtil();
                    try {
                        pdfUtil.pdf2Image(pdfFilePath,pngDir,dpi,threads);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        System.out.println("执行错误，请联系作者");
                    }
                    break;
                case "6":
                    System.exit(0);
                default:
                    System.out.println("操作参数输入错误请重新输入");
            }
        }
    }

    /**
     * 1.pdf文件的选择
     * @param sc
     */
    public void chooseFile(Scanner sc) {
        if (pdfFilePath != null) {
            System.out.println("你已经选择过pdf文件是否重新选择？（yes/no）");
            String s = sc.nextLine();
            if (!s.equalsIgnoreCase("yes")) {
                System.out.println("没有修改pdf文件数据");
                return;
            }
        }
        System.out.println("选择pdf文件路径");
        JFileChooser jFileChooser = new JFileChooser();
        int i = jFileChooser.showOpenDialog(null);
        if (i == jFileChooser.APPROVE_OPTION) { //打开bai文件du
            pdfFilePath = jFileChooser.getSelectedFile().getAbsolutePath();
//            String name = jFileChooser.getSelectedFile().getName();
            if (!pdfFilePath.endsWith("pdf") && !pdfFilePath.endsWith("PDF")) {
                System.out.println("文件选择失败，请重新选择pdf文件");
                return;
            }
            System.out.println(pdfFilePath);
//            System.out.println("当前文件路径：" + path + ";\n当前文件名dao：" + name);
        } else {
            System.out.println("没有选中文件");
        }
    }


    /**
     * 2.图片存放路径选择
     * @param sc
     */
    public void chooseDir(Scanner sc) {
        if (pngDir != null) {
            System.out.println("你已经选择过文件夹路径是否重新选择？（yes/no）");
            String s = sc.nextLine();
            if (!s.equalsIgnoreCase("yes")) {
                System.out.println("没有修改图片存放文件夹");
                return;
            }
        }
        System.out.println("选择图片存放文件夹");
        JFileChooser fileChooser = new JFileChooser("D:\\");
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = fileChooser.showOpenDialog(fileChooser);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            pngDir = fileChooser.getSelectedFile().getAbsolutePath();//这个就是你选择的文件夹的路径
            System.out.println("pngDir = " + pngDir);
        } else {
            System.out.println("没有选中文件夹");
        }
    }

    /**
     * 3.图片dpi设置
     * @param scanner
     */
    public void chooseDpi(Scanner scanner) {
        if (dpi != null) {
            System.out.println("你已经设置过图片dpi了是否重新设置？（yes/no）");
            String s = scanner.nextLine();
            if (!s.equalsIgnoreCase("yes")) {
                System.out.println("没有修改dpi数据");
                return;
            }
        }
        System.out.print("请输入你想要转换图片的dpi：");
        String s = scanner.nextLine();
        boolean numeric = isNumeric(s);
        if (!numeric) {
            System.out.println("参数错误，请输入数字参数");
            return;
        }
        dpi = Integer.parseInt(s);
    }

    /**
     * 设置线程数
     * @param sc
     */
    public void chooseThreads(Scanner sc){
        if (threads != null){
            System.out.println("你已经设置过线程数量了是否重新设置？（yes/no）");
            String s = sc.nextLine();
            if (!s.equalsIgnoreCase("yes")) {
                System.out.println("没有修改dpi数据");
                return;
            }
        }
        System.out.print("请输入线程数量：");
        String s = sc.nextLine();
        if (!isNumeric(s)){
            System.out.println("参数错误，请输入数字参数");
            return;
        }
        threads = Integer.parseInt(s);
    }


    // 判断字符串是否为数字
    public boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
}
